// /*
//  * @build   make examples
//  *
//  * @server  bin/http_server_test 8080
//  *
//  * @client  bin/http_client_test
//  *
//  */

// #include "requests.h"
// #include "axios.h"
// using namespace hv;

// #include "hthread.h" // import hv_gettid

// // 提交图片
// static void test_http_sync_client_image(void)
// {
//     std::string Authorizatoin; // header
//     std::string stcd = "0x01608B0240";
//     std::string file_format = "jpg";
//     std::string file_time = "2024-08-06 12:00:00";
//     std::string file = "";
//     double water = 100;

//     std::string url = "http://ip:port/index/Fileuploads/putServerWater";
//     std::string method = "POST";
// }

// static void test_http_async_client(HttpClient *cli, int *resp_cnt)
// {
//     printf("test_http_async_client request thread tid=%ld\n", hv_gettid());
//     auto req = std::make_shared<HttpRequest>();
//     req->method = HTTP_POST;
//     req->url = "http://127.0.0.1:8080/echo";
//     req->headers["Connection"] = "keep-alive";
//     req->body = "This is an async request.";
//     req->timeout = 10;
//     cli->sendAsync(req, [resp_cnt](const HttpResponsePtr &resp)
//                    {
//         printf("test_http_async_client response thread tid=%ld\n", hv_gettid());
//         if (resp == NULL) {
//             printf("request failed!\n");
//         } else {
//             printf("%d %s\r\n", resp->status_code, resp->status_message());
//             printf("%s\n", resp->body.c_str());
//         }
//         *resp_cnt += 1; });
// }

// static void test_http_sync_client(HttpClient *cli)
// {
//     HttpRequest req;
//     req.method = HTTP_POST;
//     req.url = "http://127.0.0.1:8080/echo";
//     req.headers["Connection"] = "keep-alive";
//     req.body = "This is a sync request.";
//     req.timeout = 10;
//     HttpResponse resp;
//     int ret = cli->send(&req, &resp);
//     if (ret != 0)
//     {
//         printf("request failed!\n");
//     }
//     else
//     {
//         printf("%d %s\r\n", resp.status_code, resp.status_message());
//         printf("%s\n", resp.body.c_str());
//     }
// }

// static void test_requests()
// {
//     // auto resp = requests::get("http://www.example.com");
//     //
//     // make clean && make WITH_OPENSSL=yes
//     auto resp = requests::get("https://www.baidu.com");

//     // auto resp = requests::get("http://127.0.0.1:8080/ping");
//     if (resp == NULL)
//     {
//         printf("request failed!\n");
//     }
//     else
//     {
//         printf("%d %s\r\n", resp->status_code, resp->status_message());
//         printf("%s\n", resp->body.c_str());
//     }

//     // // Content-Type: application/json
//     // hv::Json jroot;
//     // jroot["user"] = "admin";
//     // jroot["pswd"] = "123456";
//     // http_headers headers;
//     // headers["Content-Type"] = "application/json";
//     // resp = requests::post("http://127.0.0.1:8080/echo", jroot.dump(), headers);
//     // if (resp == NULL)
//     // {
//     //     printf("request failed!\n");
//     // }
//     // else
//     // {
//     //     printf("%d %s\r\n", resp->status_code, resp->status_message());
//     //     printf("%s\n", resp->body.c_str());
//     // }

//     // // Content-Type: multipart/form-data
//     // std::map<std::string, std::string> params;
//     // params["user"] = "admin";
//     // params["pswd"] = "123456";
//     // resp = requests::uploadFormFile("http://127.0.0.1:8080/echo", "avatar", "avatar.jpg", params);
//     // if (resp == NULL)
//     // {
//     //     printf("uploadFormFile failed!\n");
//     // }
//     // else
//     // {
//     //     printf("%d %s\r\n", resp->status_code, resp->status_message());
//     //     printf("%s\n", resp->body.c_str());
//     // }

//     /*
//     size_t filesize = requests::downloadFile("http://www.example.com/index.html", "index.html");
//     if (filesize == 0) {
//         printf("downloadFile failed!\n");
//     } else {
//         printf("downloadFile success!\n");
//     }
//     */

//     // async
//     /*
//     // auto req = std::make_shared<HttpRequest>();
//     req->url = "http://127.0.0.1:8080/echo";
//     req->method = HTTP_POST;
//     req->body = "This is an async request.";
//     req->timeout = 10;
//     requests::async(req, [](const HttpResponsePtr& resp) {
//         if (resp == NULL) {
//             printf("request failed!\n");
//         } else {
//             printf("%d %s\r\n", resp->status_code, resp->status_message());
//             printf("%s\n", resp->body.c_str());
//         }
//     });
//     */
// }

// static void test_axios()
// {
//     const char *strReq = R"(
//     {
//         "method": "POST",
//         "url": "http://127.0.0.1:8080/echo",
//         "timeout": 10,
//         "params": {
//             "page_no": "1",
//             "page_size": "10"
//         },
//         "headers": {
//             "Content-Type": "application/json"
//         },
//         "body": {
//             "app_id": "123456",
//             "app_secret": "abcdefg"
//         }
//     }
//     )";

//     // sync
//     auto resp = axios::axios(strReq);
//     // auto resp = axios::post("http://127.0.0.1:8080/echo", strReq);
//     if (resp == NULL)
//     {
//         printf("request failed!\n");
//     }
//     else
//     {
//         printf("%d %s\r\n", resp->status_code, resp->status_message());
//         printf("%s\n", resp->body.c_str());
//     }

//     // async
//     /*
//     axios::axios(strReq, [](const HttpResponsePtr& resp) {
//         if (resp == NULL) {
//             printf("request failed!\n");
//         } else {
//             printf("%d %s\r\n", resp->status_code, resp->status_message());
//             printf("%s\n", resp->body.c_str());
//         }
//     });
//     */
// }

// void test_http_hv(void)
// {
//     int req_cnt = 5;

//     HttpClient sync_client;
//     HttpClient async_client;
//     int resp_cnt = 0;

//     for (int i = 0; i < req_cnt; ++i)
//     {
//         // test_http_async_client(&async_client, &resp_cnt);

//         // test_http_sync_client(&sync_client);

//         test_requests();

//         // test_axios();
//     }

//     // demo wait async finished
//     while (resp_cnt < req_cnt)
//         hv_delay(100);
//     printf("http hv test finished!\n");
// }
